#!/usr/bin/env python

#  Copyright (c) 2010
#  The Regents of the University of Michigan
#  All Rights Reserved

#  Permission is granted to use, copy, create derivative works, and
#  redistribute this software and such derivative works for any purpose,
#  so long as the name of the University of Michigan is not used in
#  any advertising or publicity pertaining to the use or distribution
#  of this software without specific, written prior authorization. If
#  the above copyright notice or any other identification of the
#  University of Michigan is included in any copy of any portion of
#  this software, then the disclaimer below must also be included.

#  This software is provided as is, without representation or warranty
#  of any kind either express or implied, including without limitation
#  the implied warranties of merchantability, fitness for a particular
#  purpose, or noninfringement.  The Regents of the University of
#  Michigan shall not be liable for any damages, including special,
#  indirect, incidental, or consequential damages, with respect to any
#  claim arising out of or in connection with the use of the software,
#  even if it has been or is hereafter advised of the possibility of
#  such damages.

import hashlib
import socket
import struct
import sys

#import psyco
#psyco.full()

LOG_ENTRY = struct.Struct('=4sHI')

def contact_iter(log_file_name):
  ret = []
  contents = open(log_file_name, 'rb').read()
  while contents:
    try:
      raw_ip, port, time = LOG_ENTRY.unpack(contents[:LOG_ENTRY.size])
      contents = contents[LOG_ENTRY.size:]
    
      ret.append(('%s:%d' % (socket.inet_ntoa(raw_ip), port), time))
    except struct.error:
      break
  return ret


def main():
  for ip_port, time in contact_iter(sys.argv[1]):
    print hashlib.sha1(ip_port).hexdigest()

if __name__ == '__main__':
  main()
